package com.mixsmart.commonweb.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import com.mixsmart.commonweb.IWebConstant;
import com.mixsmart.commonweb.bean.UserInfo;
import com.mixsmart.commonweb.helper.HttpRequestHelper;
import com.mixsmart.core.helper.PageHelper;
import com.mixsmart.utils.StringUtils;

/**
 * 基础控制器类
 * @author lmq
 * @version 1.0
 * @since JDK版本大于等于1.6
 * 2016年1月25日
 */
public abstract class BaseController implements IWebConstant {

	protected static final Logger logger = Logger.getLogger(BaseController.class);
	
	/**
	 * 添加用户信息到session
	 * @param session HttpSession对象
	 * @param userInfo 用户信息
	 */
	protected void setUserInfo2Session(HttpSession session,UserInfo userInfo) {
		if(null != session) {
			HttpRequestHelper.setUserInfo2Session(session, userInfo);
		}
	}
	
	/**
	 * 添加用户信息到session
	 * @param request HttpRequest对象
	 * @param userInfo 用户信息
	 */
	protected void setUserInfo2Session(HttpServletRequest request,UserInfo userInfo) {
		if(null != request && null != userInfo) {
			HttpRequestHelper.setUserInfo2Session(request, userInfo);
		}
	}
	
	
	/**
	 * 从session中获取用户信息
	 * @param session HttpSession对象
	 * @return 返回session中的用户信息
	 */
    protected UserInfo getUserInfoFromSession(HttpSession session) {
    	UserInfo userInfo = null;
    	if(null != session) {
    		userInfo = HttpRequestHelper.getUserInfoFromSession(session);
    	}
    	return userInfo;
	}
    
    /**
	 * 从session中获取用户信息
	 * @param request HTTP请求对象
	 * @return 返回session中的用户信息
	 */
    protected UserInfo getUserInfoFromSession(HttpServletRequest request) {
    	UserInfo userInfo = null;
    	if(null != request) {
    		userInfo = HttpRequestHelper.getUserInfoFromSession(request);
    	}
    	return userInfo;
	}
	
    /**
     * 获取每页显示条数（分页）
     * @param perPageSize 每页显示数
     * @return 每页显示条数
     */
    protected int getPerPageSize(int perPageSize) {
		return PageHelper.getPerPageSize(perPageSize);
	}
    
    /**
     * 获取每页显示条数（分页）
     * @return 每页显示条数
     */
    protected int getPerPageSize() {
		return PageHelper.getPerPageSize();
	}
    
    /**
     * 获取当前页（分页）
     * @param page
     * @return 获取当前页面数
     */
    protected int getPage(int page) {
		return PageHelper.getPage(page);
	}
    
    /**
     * 获取总页数（分页）
     * @param total 总数据数
     * @param pageSize 每页显示数
     * @return 总页数
     */
    protected int getTotalPage(long total,int pageSize) {
		return PageHelper.getTotalPage(total, pageSize);
	}
	
	/**
	 * 获取从哪条数据开始显示（分页）
	 * @param page 当前页
	 * @param pageSize 每页显示的数量
	 * @return 开始位置
	 */
    protected int getStartNum(int page,int pageSize) {
		return PageHelper.getStartNum(page, pageSize);
	}
	
	/**
	 * 获取开始位置（分页）
	 * @param page 当前页
	 * @return 开始位置
	 */
    protected int getStartNum(int page) {
		return PageHelper.getStartNum(page);
	}
    
    
    /**
     * 从当前的request请求中获取参数 <br />
     * 返回的map对象中包含了，组织机构ID集合（key为：orgIds）
     * @param request HTTP请求对象
     * @return 返回Map
     */
	@SuppressWarnings("unchecked")
	public HashMap<String,Object> getRequestParamMap(HttpServletRequest request) {
		HashMap<String,Object> paramMaps = new HashMap<String, Object>();
		if("GET".equalsIgnoreCase(request.getMethod())) {
			Map<String,String[]> curParamMaps = request.getParameterMap();
			if(null != curParamMaps && curParamMaps.size()>0) {
				for (String key : curParamMaps.keySet()) {
					String[] values = curParamMaps.get(key);
					if(values.length<2)
						paramMaps.put(key, values[0]); 
					else
						paramMaps.put(key, values);
				}//for
			}//if
			curParamMaps = null;
		}//if
		paramMaps.put("orgIds", StringUtils.list2Array(getUserInfoFromSession(request).getOrgIds()));
		return paramMaps;
	}
	
	
	/**
	 * 根据paramName和paramValue两个参数中提取参数 <br />
	 * 如：paramName=“id,name”   paramValue="1,张三";则提取后等到的参数为：
	 * id=1;name="张三"；变量名称作为MAP的key，变量值作为MAP的value，放到到Map对象中 <br />
	 * <b>注：</b>paramName和paramValue要一对一；如上面的例子:id=1;name=张三
	 * 返回的map对象中包含了，组织机构ID集合（key为：orgIds）
	 * @param paramName 名称集合（多个名称之间用逗号","分割）
	 * @param paramValue 值集合（多个名称之间用逗号","分割）
	 * @return 返回处理后的Map
	 */
	protected HashMap<String,Object> getParamMaps(HttpSession session,String paramName,String paramValue) {
		HashMap<String, Object> params = new HashMap<String, Object>();
		if(StringUtils.isNotEmpty(paramName) && StringUtils.isNotEmpty(paramValue)) {
			String[] paramNames = paramName.split(",");
			String[] paramValues = paramValue.split(",");
			if(paramNames.length == paramValues.length) {
				for (int i = 0; i < paramNames.length; i++) {
					params.put(paramNames[i], paramValues[i]);
				}
			}
			paramNames = null;
			paramValues = null;
		}
		params.put("orgIds", StringUtils.list2Array(getUserInfoFromSession(session).getOrgIds()));
		return params;
	}
	
}
